/* SKSWT Übung 3

Aufgabe 1: Finden Sie heraus, wie in Java für einen String der Hashcode berechnet wird. 

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

Array = ABC
A=65, B=66, C=67

A*31^(2) + B*31^(1) + C*31^(0) = 62465 + 2046 + 67 = 64578

B*31^(2) + A*31^(1) + C*31^(0) = 63426 + 2015 + 67 = 65508

int hash = 0;
for (int i = 0; i < length; i++)
{
    hash = 31*hash + value[i];
}
return hash;


Aufgabe 2: (5 Punkte) Wozu dient ein Hashcode überhaupt? Lassen sich damit vielleicht auch Fehler (5 Punkte) 

Dient zu:
Aus einer großen Datenmenge eine (möglichst eindeutige) kleiner Zieldatenmenge erzeugen. Auch Fingerprint genannt -> eindeutige Identifizierung
Ändert sich die Eingabe, so ändert sich auch der Hashcode. Eine Rückberechnung ist (möglichst) zu vermeiden. Wird häufig bei Passwörter eingesetzt.

Fehler:
Ja, wenn der Hashcode eines z.B. Wortes bekannt ist.
Beispiel: Der Hashcode eines Passwortes ist 10. Diese 10 wird gespeichert, eine rückberechnung zum Wort ist nicht möglich.
Wird das falsche Wort eingegeben, so ändert sich auch der Hashcode, z.B. zu 20. Ein vergleich von 10 und 20 ergibt !=.

Hashcode einer Datei. Dieser wird in CRC32 oder md5 ... abgelegt. Ändert sich die Datei, so ändert sich auch der Hashcode (außer im Falle einer Kollision).
Der Vergleich zeigt nun an, das sich die Datei geändert hat.


Aufgabe 3: siehe SC


Aufgabe 4: assert, Assertion

assert.h Dient zur Behandlung von Ausnahmen.
assert(Variable != null) führt bei einen übergebenen Null-Wert zu einer Ausnahme und gibt sie auf der Konsole (mit Zeilennummer aus) aus.


*/

int main()
{




	return 0;
}


/*
xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx

CHash[HashCodeLänge] Prüfsumme; 

for(j=0; j<= LängeText; j+=HashCodeLänge)
{
	for(int i = j; i <= HashCodeLänge; ++i)
	{
		Prüfsumme[i] += char[i];
		
	
	}
}



*/